package light.mvc.service.wxn.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import light.mvc.dao.BaseDaoI;
import light.mvc.model.wxn.WeiTagsBO;
import light.mvc.pageModel.base.PageFilter;
import light.mvc.pageModel.wxn.WeiTagsVO;
import light.mvc.service.wxn.WeiTagsServiceI;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class WeiTagsServiceImpl implements WeiTagsServiceI {

   @Autowired
   private BaseDaoI<WeiTagsBO> WeiTagsDao;
   
   @Override
	public List<WeiTagsVO> treeGrid() {
	    List<WeiTagsVO> lr = new ArrayList<WeiTagsVO>();
		List<WeiTagsBO> l = WeiTagsDao.find("from WeiTagsBO t");
		if ((l != null) && (l.size() > 0)) {
			for (WeiTagsBO t : l) {
				WeiTagsVO r = new WeiTagsVO();
				BeanUtils.copyProperties(t, r);
				if (t.getWeiTagsBO() != null) {
					r.setPid(t.getWeiTagsBO().getId());
				}
				lr.add(r);
			}
		}
		return lr;
	}
   

   @Override
   public void add(WeiTagsVO r) {
       WeiTagsBO t = new WeiTagsBO();
       t.setTagId(r.getTagId());
       t.setTagName(r.getTagName());
       t.setTagCount(r.getTagCount());
       t.setTagNote(r.getTagNote());
       t.setTagAppid(r.getTagAppid());
       WeiTagsDao.save(t);
   }

   @Override
   public void delete(Long id) {
       WeiTagsBO t = WeiTagsDao.get(WeiTagsBO.class, id);
       WeiTagsDao.delete(t);
   }

   @Override
   public void edit(WeiTagsVO r) {
       WeiTagsBO t = WeiTagsDao.get(WeiTagsBO.class, r.getId());
       t.setTagId(r.getTagId());
       t.setTagName(r.getTagName());
       t.setTagCount(r.getTagCount());
       t.setTagNote(r.getTagNote());
       t.setTagAppid(r.getTagAppid());
       WeiTagsDao.update(t);
   }

   @Override
   public WeiTagsVO get(Long id) {
       WeiTagsBO t = WeiTagsDao.get(WeiTagsBO.class, id);
       WeiTagsVO r = new WeiTagsVO();
       r.setId(id);
       r.setId(t.getId());
       r.setTagId(t.getTagId());
       r.setTagName(t.getTagName());
       r.setTagCount(t.getTagCount());
       r.setTagNote(t.getTagNote());
       r.setTagAppid(t.getTagAppid());
       return r;
   }

   @Override
   public List<WeiTagsVO> dataGrid(WeiTagsVO weiTags, PageFilter ph) {
       List<WeiTagsVO> ul = new ArrayList<WeiTagsVO>();
       Map<String, Object> params = new HashMap<String, Object>();
       String hql = " from WeiTagsBO t ";
       List<WeiTagsBO> l = WeiTagsDao.find(hql + whereHql(weiTags, params) + orderHql(ph), params, ph.getPage(), ph.getRows());
       for (WeiTagsBO t : l) {
           WeiTagsVO u = new WeiTagsVO();
           BeanUtils.copyProperties(t, u);
           ul.add(u);
       }
       return ul;
   }

   @Override
   public Long count(WeiTagsVO weiTags, PageFilter ph) {
       Map<String, Object> params = new HashMap<String, Object>();
       String hql = " from WeiTagsBO t ";
       return WeiTagsDao.count("select count(*) " + hql + whereHql(weiTags, params), params);
   }

   private String whereHql(WeiTagsVO weiTags, Map<String, Object> params) {
       String hql = "";
       if (weiTags != null) {
           hql += " where 1=1 ";
           if (weiTags.getId() != null) {
               hql += " and t.name like :name";
               params.put("name", "%%" + weiTags.getId() + "%%");
           }
       }
       return hql;
   }

   private String orderHql(PageFilter ph) {
       String orderString = "";
       if ((ph.getSort() != null) && (ph.getOrder() != null)) {
           orderString = " order by t." + ph.getSort() + " " + ph.getOrder();
       }
       return orderString;
   }
}